/* flags bit in 'fbit' header */ #define substitutionIsOn 0x0001 // KanjiTalk font substitution is on // 'fbit' standard header typedef struct { unsigned short fontFlags; ResType resourceType; short resourceID; unsigned short fdefVersion; unsigned short fdefID; ProcPtr fdefProc; short fondID; unsigned short priority; long reserved0; unsigned short height; unsigned short width; short style; unsigned short reserved1; unsigned short firstChar; unsigned short lastChar; } fbitStdHeader; // character code to bit image offset typedef struct { unsigned short firstChar; // first kanji code unsigned short lastChar; // last kanji code unsigned short flags; // reserved (This bit must be set to 0) unsigned long offset; // format 5 :offset to bit image from beginning of 'bdat' // format 4 :offset to a offset field to bit image in 'bdat' } charToOffset; // 'fbit' for sbit format 4 typedef struct { fbitStdHeader header; // 'fbit' standard header unsigned short flags; // flags short sfntID; // 'sfnt' ID (initialized in OpenFbit call) short fontScript; // font script code (initialized in OpenFbit call) short bdatFormat; // 'bdat' format (should be 4) unsigned long bdatOffset; // offset to 'bdat' in 'sfnt' (initialized in OpenFbit call) unsigned long bdatImageSize; //Å@size of bit image per a glyph (initialized in OpenFbit call) Handle bdatRowData; // row bitmap data from 'bdat' (allocated on runtime) unsigned char bdatHeight; // height of bit image in bdat unsigned char bdatWidth; // width of bit image in bdat unsigned char top; // offset from top of bdat bitmap to fbit bitmap unsigned char left; // offset from left of bdat bitmap to fbit bitmap unsigned long bdatOffToTree; // offset to a offset field to binary tree info from // beginning of 'bdat' Handle bdatCompData; // buffer to compressed data (allocated on runtime) Handle bdatWhiteTree; // copy of white tree (initialized in OpenFbit call) Handle bdatBlackTree; // copy of black tree (initialized in OpenFbit call) unsigned short numOfRanges; // number of ranges charToOffset ranges[]; // range information // When substitutionIsOn is off, ranges[0] should have offset // to the missing glyph. In this case, firstChar should be // equal to 0. // String sfntName; // Pascal string that contains font family name // (should be same as unique subfamily identification name // in 'name' table) } sbit4FbitRecord, *sbit4FbitPtr, **sbit4FbitHndl; // 'fbit' for sbit format 5 typedef struct { fbitStdHeader header; // 'fbit' standard header unsigned short flags; // flags short sfntID; // 'sfnt' ID (initialized in OpenFbit call) short fontScript; // font script code (initialized in OpenFbit call) short bdatFormat; // 'bdat' format (should be 5) unsigned long bdatOffset; // offset to 'bdat' in 'sfnt' (initialized in OpenFbit call) unsigned long bdatImageSize; // size of bit image per a glyph (initialized in OpenFbit call) Handle bdatRowData; // row bitmap data from 'bdat' (allocated on runtime) unsigned char bdatHeight; // height of bit image in bdat unsigned char bdatWidth; // width of bit image in bdat unsigned char top; // offset from top of bdat bitmap to fbit bitmap unsigned char left; // offset from left of bdat bitmap to fbit bitmap unsigned short numOfRanges; // number of ranges charToOffset ranges[]; // range information // When substitutionIsOn is off, ranges[0] should have offset // to the missing glyph. In this case, firstChar should be // equal to 0. // String sfntName; // Pascal string that contains font family name // (should be same as unique subfamily identification name // in 'name' table) } sbit5FbitRecord, *sbit5FbitPtr, **sbit5FbitHndl;
![]() |
à»â∫Ç…äeÉtÉBÅ[ÉãÉhÇÃà”ñ°Çê‡ñæÇ¢ÇΩǵNjÇ∑ÅB
header 'fbit'ÇÃïWèÄÉwÉbÉ_ÅBfdefIDÇÕ42Ç≈džÇÈDZÇΔÅBfdefVersionÇÕ0x0001Ç≈džÇÈDZÇΔÅBǪÇÃëºÇÃÉtÉBÅ[ÉãÉhÇ…ä÷ǵǃÇÕÅAÅuMacintosh äøéöTalkÉeÉNÉjÉJÉãÉäÉtÉ@ÉåÉìÉXÅvÅiãZèpï]ò_é–ÅjÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB flags 'fbit'ÇÃéÌÅXÇÃê›íËÇé¶ÇµÇ‹Ç∑ÅBÉoÅ[ÉWÉáÉì1Ç≈ÇÕä€äøÉTÉ|Å[ÉgÇ…ÇÊÇÈÉtÉHÉìÉgë„ópÅifont substitutionÅjÇÃÉIÉìÅ^ÉIÉtÇÃÇPÉrÉbÉgÇÃǛǙíËã`Ç≥ÇÍǃǢNjÇ∑ÅBǪÇÃëºÇÃÉrÉbÉgÇÕÇOÇ…Ç≥ÇÍǃǢÇÈDZÇΔÅBÉtÉHÉìÉgë„ópÇ™ÉIÉìÇÃèÍçáÇ…ÇÕÅA'fbit'Ç≈íËã`Ç≥ÇÍǃǢǻǢäøéöÉRÅ[ÉhÇï\é¶Ç∑ÇÈç€Ç…ä€äøÉTÉ|Å[ÉgÇÃìΔé©ÇÃÉtÉHÉìÉgÉTÅ[É`ÉvÉçÉZÉXÇ…ÇÊÇÈÉtÉHÉìÉgÇÃë„ópÇ™ãNDZÇËÇ‹Ç∑ÅBÉIÉtÇÃèÍçáÇ…ÇÕ'fbit'Ç™ÉfÅ[É^ÇéùÇΩǻǢäøéöÉRÅ[ÉhÇ…ëŒÇµÇƒÅusbitÅvÇ™éùǬfbitópÇÃÉ~ÉbÉVÉìÉOÉLÉÉÉâÉNÉ^Çï\é¶ÇµÅAä€äøÉTÉ|Å[ÉgÇ…ÇÕÉGÉâÅ[Çï‘Ç≥ǻǢÇÃÇ≈ÉtÉHÉìÉgÇÃë„ópÇ™ãNDZÇËÇ‹ÇπÇÒÅB ![]() ê}2 sfntID ëŒè€'sbit'Çä‹Çfi'sfnt'ÉäÉ\Å[ÉXÇÃIDÅBsbit fdefÇ™èâä˙âªÇµÇ‹Ç∑ÅB fontScript ÉtÉHÉìÉgÇÃÉXÉNÉäÉvÉgÉRÅ[ÉhÅBsbit fdefÇ™èâä˙âªÇµÇ‹Ç∑ÅB bdatFormat ëŒè€'sbit'ÇÃ'bdat'ÇÃÉtÉHÅ[É}ÉbÉgÅBDZÇÃsbit fdefÇ≈ÇÕÉtÉHÅ[É}ÉbÉgÇÃ4ÇΔ5ÇÃÇ›ÇÉTÉ|Å[ÉgǵNjÇ∑ÅB bdatOffset 'sfnt'ÉäÉ\Å[ÉXì‡ÇÃ'bdat'ÉeÅ[ÉuÉãÇÃÉçÉPÅ[ÉVÉáÉìÅBsbit fdefÇ™èâä˙âªÇµÇ‹Ç∑ÅB bdatImageSize 'bdat'ì‡ÇÃï∂éöÉfÅ[É^ÇÃàÍï∂éöï™ÇÃÉoÉCÉgÉTÉCÉYÅBsbit fdefÇ™èâä˙âªÇµÇ‹Ç∑ÅB bdatRowData 'bdat'ÉfÅ[É^ÇÃì«Ç›èoǵêÊÇÃÉoÉbÉtÉ@ÅBsbit fdefÇ™ämï€Å^âï˙ǵNjÇ∑ÅB bdatHeight 'bdat'ì‡ÇÃï∂éöÇÃçÇÇ≥ÅBÉsÉNÉZÉãíPà ÅB'sbit'ÇÃindexSubTable2ÇÃbigMetrics.heightÇΔìØÇ∂ílÇ≈džÇÈDZÇΔÅB bdatWidth 'bdat'ì‡ÇÃï∂éöÇÃïùÅBÉsÉNÉZÉãíPà ÅB'sbit'ÇÃindexSubTable2ÇÃbigMetrics.widthÇΔìØÇ∂ílÇ≈džÇÈDZÇΔÅB top / left 'bdat'ÉrÉbÉgÉ}ÉbÉvÇ©ÇÁ'fbit'ÉrÉbÉgÉ}ÉbÉvÇ÷ÇÃÉIÉtÉZÉbÉgÅB'bdat'ÇÃÉrÉbÉgÉ}ÉbÉvÇÃbound rectangleÇΔ'fbit'ÇÃÉrÉbÉgÉ}ÉbÉvÇÃbound rectangleÇÃç∂è„ÇÃà íuǙǫÇÃÇ≠ÇÁÇ¢Ç∏ÇÍǃǢÇÈÇ©Çé¶ÇµÇ‹Ç∑ÅBÇΩÇæÇµÅAí èÌÇÕÅAtopÅAleftóºï˚ÇΔLJ0Ç…Ç»ÇÈÇÕÇ∏Ç≈Ç∑ÅBâ∫ê}éQèΔÅB ![]() bdatOffToTreeÅisbit formatÇ™ÇSÇÃèÍçáÇÃÇ›ë∂ç›Ç∑ÇÈÅj 'bdat'ì‡ÇÃformat=4ópÇÃÉoÉCÉiÉäÉcÉäÅ[Ç÷ÇÃÉIÉtÉZÉbÉgÇäiî[Ç∑ÇÈÉtÉBÅ[ÉãÉhÇ÷ÇÃÉIÉtÉZÉbÉgÅB bdatCompDataÅisbit formatÇ™ÇSÇÃèÍçáÇÃÇ›ë∂ç›Ç∑ÇÈÅj à≥èkÇ≥ÇÍÇΩÉfÅ[É^Çì«Ç›çûÇfiÉoÉbÉtÉ@ÅBsbit fdefÇ™ämï€Å^âï˙ǵNjÇ∑ÅB bdatWhiteTreeÅisbit formatÇ™ÇSÇÃèÍçáÇÃÇ›ë∂ç›Ç∑ÇÈÅj îíÇÃÉsÉNÉZÉãÇÃÉoÉCÉiÉäÉcÉäÅ[ÇÃÉRÉsÅ[ÅBsbit fdefÇ™ämï€Å^âï˙ǵNjÇ∑ÅB bdatBlackTreeÅisbit formatÇ™ÇSÇÃèÍçáÇÃÇ›ë∂ç›Ç∑ÇÈÅj çïÇÃÉsÉNÉZÉãÇÃÉoÉCÉiÉäÉcÉäÅ[ÇÃÉRÉsÅ[ÅBsbit fdefÇ™ämï€Å^âï˙ǵNjÇ∑ÅB numOfRanges / ranges[ ] ÉâÉìÉeÅ[ÉuÉãÇΔǪÇÃêîÅBÉâÉìÉeÅ[ÉuÉãÇÕäøéöÉLÉÉÉâÉNÉ^Å[ÉRÅ[ÉhÅiÉVÉtÉgJISÅjÇΔ'bdat'ì‡ÇÃÉrÉbÉgÉ}ÉbÉvÉfÅ[É^ÇÃÉçÉPÅ[ÉVÉáÉìÇΔÇÃëŒâûÇé¶ÇµÇ‹Ç∑ÅBÉçÉPÅ[ÉVÉáÉìÇÕ'bdat'ÉeÅ[ÉuÉãÇÃêÊì™Ç©ÇÁÇÃÉIÉtÉZÉbÉgÇ≈éwíËǵNjÇ∑ÅB ÉLÉÉÉâÉNÉ^Å[ÉRÅ[ÉhÇÕÇPÇ©ÇÁÇÃòAë±ÇµÇΩÉCÉìÉfÉbÉNÉXî‘çÜÇ…ïœä∑Ç≥ÇÍǃégópÇ≥ÇÍÇÈÇÃÇ≈ÅAé¿ç€Ç…ÇÕäøéöÇÃäÑÇËìñǃÇÁÇÍǃǢǻǢÉRÅ[ÉhÇä‹ÇÒÇ≈ǢǃLJç\ǢNjÇπÇÒÅB'bdat'ÇÕÉLÉÉÉâÉNÉ^Å[ÉRÅ[ÉhèáÇ…ÅAÇΩÇæÇµòAë±ÇµÇƒÉrÉbÉgÉ}ÉbÉvÉfÅ[É^Çé˚ÇflǃǢÇÈDZÇΔÅBÇΩÇΔǶnjÅAäøéöè„à ÉoÉCÉgÇÃ$A0Ç©ÇÁ$DFÇ‚â∫à ÉoÉCÉgÇÃ$7FÇÕfirstCharÇΔlastCharÇÃä‘Ç…ä‹Ç‹ÇÍǃǢǃLJñ≥éãÇ≥ÇÍÇ‹Ç∑ÅBãtÇ…ÅAè„à ÉoÉCÉg$88ÇÃÉâÉCÉìÇÇ∑Ç◊ǃä‹ÇfiÉâÉìÇíËã`ǵÇΩÇΔÇ´Ç…$887FÇ…ëŒâûÇ∑ÇÈÉrÉbÉgÉ}ÉbÉvÉfÅ[É^Ç™'bdat'ì‡Ç…ë∂ç›ÇµÇƒÇÕÇ»ÇÁǻǢÅBÉRÅ[ÉhÇ™íËã`Ç≥ÇÍǃǢÇÈDžLJǩǩÇÌÇÁÇ∏åªç›ÇÕégÇÌÇÍǃǢǻǢîÕàÕÅiãLçÜãÊÇ‚ëÊàÍêÖèÄÇΔëÊìÒêÖèÄÇÃÇ†Ç¢ÇæÇ»Ç«ÅjÇÕÉâÉìÉeÅ[ÉuÉãÇ…ÇÊǡǃÉXÉLÉbÉvÇ≥ÇÍǃǢÇÈÇ◊Ç´Ç≈Ç∑ÅB'fbit'ÇÃflagsÇ≈ÉtÉHÉìÉgë„ópÇÃÉrÉbÉgÇ™ÉIÉtÇÃèÍçáÅArangesÇÃç≈èâÇÃÉGÉìÉgÉäÅiranges[0]ÅjÇÃoffsetÇÕfbitópÇÃÉ~ÉbÉVÉìÉOÉLÉÉÉâÉNÉ^ÇÃÉrÉbÉgÉ}ÉbÉvÉfÅ[É^ÇéwÇµÇƒÇ¢Ç»ÇØÇÍnjǻÇÁǻǢÅBDZÇÃÇΔÇ´firstCharÅAlastCharÇÕÇΔLJDžÇOÇ≈džÇÈDZÇΔÅBcharToOffsetì‡ÇÃflagsÇÕÅAåªç›ñ¢íËã`ÅBïKÇ∏0Ç…ÉZÉbÉgǵǃÇ≠ÇæÇ≥Ç¢ÅB sfntName ÉpÉXÉJÉãÉXÉgÉäÉìÉOÉtÉHÅ[É}ÉbÉgÇÃÉtÉHÉìÉgñºÅBDZDZÇ≈ÇÃñºëOÇÕ'FOND'ÇÃñºëOÇ≈ÇÕÇ»Ç≠ÅA'sfnt'ÇÃ'name'ÉeÅ[ÉuÉãÇÃUnique Subfamily Identification Name (Name ID=3)ÇΔìØÇ∂LJÇÃÇéwíËǵNjÇ∑ÅBÇ‹ÇΩÅAégÇÌÇÍÇÈUnique Subfamily NameÇÕPlatform-specific ID (script code)Ç™'fbit'ÇÃfontScriptÇΔìØÇ∂Ç≈džÇÈName recordÇ©ÇÁÇÃLJÇÃÇ≈džÇÈDZÇΔÅB 'bdat' ÇΔ sbit fdef ÇÃÉfÅ[É^ÇÃä÷òAÇ…ä÷Ç∑ÇÈê}ï\ |